package com.icoolkj.ms.auth.mapper;

import com.icoolkj.ms.api.auth.model.AuthAccount;
import com.icoolkj.ms.api.auth.vo.AuthAccountVO;
import com.icoolkj.ms.common.security.bo.AuthAccountInVerifyBO;
import org.apache.ibatis.annotations.Param;

/**
 * @author icoolkj
 * @version 1.0
 * @description
 * @createDate 2025/02/04 16:28
 */
public interface AuthAccountMapper {

    /**
     * 根据输入的账号信息及用户类型获取用户信息
     *
     * @param inputUserNameType 账号类型 1.username 2.mobile 3.email
     * @param inputUserName     账号值（用户名、手机号码、邮箱）
     * @param userType          用户类型
     * @return 用户在token中信息 + 数据库中的密码
     */
    AuthAccountInVerifyBO getAuthAccountInVerifyByInputUserName(@Param("inputUserNameType") Integer inputUserNameType,
                                                                @Param("inputUserName") String inputUserName,
                                                                @Param("userType") String userType);

    /**
     * 根据账号信息和用户类型获取用户信息
     *
     * @param inputUserNameType 账号类型 1.username 2.mobile 3.email
     * @param inputUserName     账号值（用户名、手机号码、邮箱）
     * @param userType          用户类型
     * @return 用户信息
     */
    AuthAccountVO getByInputUsernameAndUserType(@Param("inputUserNameType") Integer inputUserNameType,
                                                @Param("inputUserName") String inputUserName,
                                                @Param("userType") String userType);

    /**
     * 保存认证账户信息
     *
     * @param authAccount 认证账户信息
     * @return 影响行数
     */
    int saveAuthAccount(AuthAccount authAccount);
    
    /**
     * 逻辑删除账户
     *
     * @param uid 用户唯一ID
     * @return 影响行数
     */
    int deleteByUid(@Param("uid") Long uid);
    
    /**
     * 批量逻辑删除账户
     *
     * @param uids 用户唯一ID数组
     * @return 影响行数
     */
    int batchDeleteByUids(@Param("uids") Long[] uids);
}
